// 1、引入axios
import axios from 'axios'

console.log(process.env.NODE_ENV)

// 实例
const request = axios.create({
  baseURL: process.env.NODE_ENV === 'development' ? '/api' : '/baidu',
  timeout: 10000,
  headers: { 'X-Custom-Header': 'foobar' }
})

// 添加请求拦截器
request.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 在请求头里面加上访问令牌accesstoken 
    config.headers.Authorization = 'Bearer ' + localStorage.getItem('accessToken')
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)
// 添加响应拦截器
request.interceptors.response.use(async function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    if (response.data.code !== 200) {
      if (response.data.code === 400) {
        return Promise.reject('语法错误')
      } else if (response.data.code === 401) {
        // return Promise.reject('会话失败')
        const resp = await refreshToken()
        // 获取接口返回的accesstoken
        const accessToken = resp.data.data.accessToken
        // 拿到接口的accesstoken替换掉本地存储的accesstoken
        localStorage.setItem('accessToken', accessToken)
        // 在请求头里面用新的accesstoken
        response.config.headers.Authorization = 'Bearer ' + accessToken
        return request(response.config)

      } else if (response.data.code === 403) {
        return Promise.reject('暂无权限')
      } else if (response.data.code === 404) {
        return Promise.reject('请求失败')
      } else if (response.data.code === 500) {
        return Promise.reject('服务端有误')
      }
    }
    return response
  },
  function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// 重新请求接口获取到新的访问令牌 为了拿到access token
function refreshToken() {
  return request.get('/refreshToken', { params: { refreshToken: localStorage.getItem('refreshToken')} })
}

export default request

// const freshTOken = () => {
//   return request.get('/refreshToken', {
//     params: { refreshToken: localStorage.getItem('refreshToken') }
//   })
// }

// const resp = await freshTOken()
// const accessToken = resp.data.data.accessToken
// localStorage.setItem('accessToken', accessToken)
// response.config.headers.Authorization = 'Bearer ' + accessToken
// return request(response.config)

// config.headers.Authorization = 'Bearer ' + localStorage.getItem('accessToken')
